From 4e2080291801fe3fb4c9851ef6ef9fe6b014c717 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Mon, 13 Mar 2006 15:06:58 +0100 Subject: [PATCH] Clean up block-device hotplug routines in xenlinux. Signed-off-by: Keir Fraser --- .../drivers/xen/blkfront/blkfront.c | 6 +----- .../drivers/xen/blkfront/vbd.c | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c index c8c9decc38..5c73634c83 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c @@ -352,11 +352,7 @@ static void blkfront_closing(struct xenbus_device *dev) DPRINTK("blkfront_closing: %s removed\n", dev->nodename); - if (info->mi) { - DPRINTK("Calling xlvbd_del\n"); - xlvbd_del(info); - info->mi = NULL; - } + xlvbd_del(info); xenbus_switch_state(dev, XBT_NULL, XenbusStateClosed); } diff --git a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c index d97f798e6f..b092a569ae 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c @@ -216,6 +216,10 @@ xlvbd_alloc_gendisk(int minor, blkif_sector_t capacity, int vdevice, int nr_minors = 1; int err = -ENODEV; + BUG_ON(info->gd != NULL); + BUG_ON(info->mi != NULL); + BUG_ON(info->rq != NULL); + mi = xlbd_get_major_info(vdevice); if (mi == NULL) goto out; @@ -268,6 +272,7 @@ xlvbd_alloc_gendisk(int minor, blkif_sector_t capacity, int vdevice, out: if (mi) xlbd_put_major_info(mi); + info->mi = NULL; return err; } @@ -294,22 +299,20 @@ xlvbd_add(blkif_sector_t capacity, int vdevice, u16 vdisk_info, void xlvbd_del(struct blkfront_info *info) { - struct block_device *bd; - - bd = bdget(info->dev); - if (bd == NULL) - return; - - if (info->gd == NULL) + if (info->mi == NULL) return; + BUG_ON(info->gd == NULL); del_gendisk(info->gd); put_disk(info->gd); + info->gd = NULL; + xlbd_put_major_info(info->mi); info->mi = NULL; - blk_cleanup_queue(info->rq); - bdput(bd); + BUG_ON(info->rq == NULL); + blk_cleanup_queue(info->rq); + info->rq = NULL; } /* -- 2.30.2